package org.demo.es.service;

import java.util.List;
import java.util.Map;

/**
 * DocumentService接口
 * 用于定义ElasticSearch的文档的增删改查操作
 * @author moxiaoli
 */
public interface DocumentService {

    /**
     * 添加文档
     * @param index 索引名称
     * @param id 文档id
     * @param data 文档数据
     * @return 是否添加成功
     */
    <T> boolean addDocument(String index, String id, T data);

    /**
     * 删除文档
     * @param index 索引名称
     * @param id 文档id
     * @return 是否删除成功
     */
    boolean deleteDocument(String index, String id);

    /**
     * 更新文档
     * @param index 索引名称
     * @param id 文档id
     * @param data 文档数据
     * @param clazz 文档类型
     * @return 是否更新成功
     */
    <T> boolean updateDocument(String index, String id, T data, Class<T> clazz);

    /**
     * 获取文档
     * @param index 索引名称
     * @param id 文档id
     * @param clazz 文档类型
     * @return 文档数据
     */
    <T> T getDocument(String index, String id, Class<T> clazz);

    /**
     * 判断文档是否存在
     * @param index 索引名称
     * @param id 文档id
     * @return 是否存在
     */
    boolean isDocumentExist(String index, String id);

    /**
     * 批量添加文档
     * @param index 索引名称
     * @param data 文档数据
     * @return 是否添加成功
     */
    <T> boolean bulkAddDocument(String index, List<Map<String,T>> data);

    /**
     * 批量删除文档
     * @param index 索引名称
     * @param ids 文档id列表
     * @return 是否删除成功
     */
    boolean bulkDeleteDocument(String index, List<String> ids);

    /**
     * 批量更新文档
     * @param index 索引名称
     * @param data 文档数据
     * @param clazz 文档类型
     * @return 是否更新成功
     */
    <T> boolean bulkUpdateDocument(String index,List<Map<String,T>> data, Class<T> clazz);

    /**
     * 批量获取文档
     * @param index 索引名称
     * @param ids 文档id列表
     * @param clazz 文档类型
     * @return 文档数据列表
     */
    <T> List<T> bulkGetDocument(String index, List<String> ids, Class<T> clazz);

}
